import request from '@/utils/request'

/**
 * 获取学生的课程列表
 *
 * @param {String} studentId 学生ID
 * @returns {Promise} 请求Promise
 */
export function getStudentCourses(studentId) {
  return request({
    url: `/student-course/list/${studentId}`,
    method: 'get'
  })
}

/**
 * 获取课程详情
 *
 * @param {String} courseId 课程ID
 * @param {Number} classId 班级ID
 * @param {String} studentId 学生ID
 * @returns {Promise} 请求Promise
 */
export function getCourseDetail(courseId, classId, studentId) {
  return request({
    url: '/student-course/detail',
    method: 'get',
    params: { courseId, classId, studentId }
  })
}

/**
 * 获取学生信息
 *
 * @param {String} studentId 学生ID
 * @returns {Promise} 请求Promise
 */
export function getStudentInfo(studentId) {
  return request({
    url: `/students/${studentId}`,
    method: 'get'
  })
}

/**
 * 更新学生信息
 *
 * @param {String} studentId 学生ID
 * @param {Object} data 学生数据
 * @returns {Promise} 请求Promise
 */
export function updateStudentInfo(studentId, data) {
  return request({
    url: `/students/${studentId}`,
    method: 'put',
    data
  })
}

/**
 * 获取课程公告列表
 *
 * @param {String} courseId 课程ID
 * @param {Number} classId 班级ID
 * @returns {Promise} 请求Promise
 */
export function getCourseAnnouncements(courseId, classId) {
  return request({
    url: '/course-announcement/list',
    method: 'get',
    params: { courseId, classId }
  })
}

/**
 * 获取系统公告
 *
 * @returns {Promise} 请求Promise
 */
export function getSystemAnnouncements() {
  return request({
    url: '/announcement',
    method: 'get'
  })
}

/**
 * 获取课程作业列表
 *
 * @param {String} courseId 课程ID
 * @param {Number} classId 班级ID
 * @param {String} studentId 学生ID - 获取该学生的提交状态
 * @returns {Promise} 请求Promise
 */
export function getCourseAssignments(courseId, classId, studentId) {
  return request({
    url: `/assignments/course/${courseId}/class/${classId}`,
    method: 'get',
    params: { studentId }
  })
}

/**
 * 获取学生的作业详情
 *
 * @param {Number} assignmentId 作业ID
 * @param {String} studentId 学生ID
 * @returns {Promise} 请求Promise
 */
export function getStudentAssignmentDetail(assignmentId, studentId) {
  return request({
    url: `/assignment-allocations/assignment/${assignmentId}/student/${studentId}`,
    method: 'get'
  })
}

/**
 * 提交作业
 *
 * @param {Object} submissionData 提交数据对象，包含assignmentId, studentId等信息
 * @param {File} file 作业文件
 * @returns {Promise} 请求Promise
 */
export function submitAssignment(submissionData, file) {
  const formData = new FormData();
  
  // 将提交数据转为JSON字符串并添加到FormData
  formData.append('submission', new Blob([JSON.stringify(submissionData)], {
    type: 'application/json'
  }));
  
  // 如果有文件，添加到FormData
  if (file) {
    formData.append('file', file);
  }
  
  return request({
    url: '/submissions',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });
}

/**
 * 上传作业文件
 *
 * @param {File} file 文件对象
 * @returns {Promise} 请求Promise，返回文件URL
 */
export function uploadAssignmentFile(file) {
  const formData = new FormData()
  formData.append('file', file)
  
  return request({
    url: '/oss/upload',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 下载作业文件
 *
 * @param {String} fileUrl 文件URL
 * @returns {Promise} 请求Promise
 */
export function downloadAssignmentFile(fileUrl) {
  // 先通过API获取可用的下载链接
  return request({
    url: '/oss/download',
    method: 'get',
    params: { url: fileUrl }
  }).then(res => {
    if (res.code === 200 && res.data) {
      // 直接在新窗口中打开链接下载文件
      window.open(res.data, '_blank');
      return Promise.resolve({ success: true });
    } else {
      return Promise.reject(new Error(res.message || '下载失败'));
    }
  });
}

/**
 * 获取学生的所有作业统计
 *
 * @param {String} studentId 学生ID
 * @returns {Promise} 请求Promise
 */
export function getStudentAssignmentStats(studentId) {
  return request({
    url: `/assignment-allocations/student/${studentId}`,
    method: 'get'
  })
}

/**
 * 获取学生特定课程的作业统计
 *
 * @param {String} studentId 学生ID
 * @param {String} courseId 课程ID
 * @param {Number} classId 班级ID
 * @returns {Promise} 请求Promise
 */
export function getStudentCourseAssignmentStats(studentId, courseId, classId) {
  return request({
    url: `/assignment-allocations/assignment/course/${courseId}/class/${classId}/student/${studentId}/stats`,
    method: 'get'
  })
}

/**
 * 上传学生头像
 * 
 * @param {File} file 头像文件
 * @returns {Promise} 请求Promise
 */
export function uploadStudentAvatar(file) {
  const formData = new FormData()
  formData.append('file', file)
  
  return request({
    url: '/oss/upload',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 更新学生头像URL
 *
 * @param {String} studentId 学生ID
 * @param {String} avatarUrl 头像URL
 * @returns {Promise} 请求Promise
 */
export function updateStudentAvatar(studentId, avatarUrl) {
  return request({
    url: `/students/${studentId}/avatar`,
    method: 'put',
    data: { avatarUrl }
  })
}

/**
 * 获取作业详情
 *
 * @param {Number} assignmentId 作业ID
 * @returns {Promise} 请求Promise
 */
export function getAssignmentById(assignmentId) {
  return request({
    url: `/assignments/${assignmentId}`,
    method: 'get'
  })
} 

/**
 * 获取学生的所有提交记录
 *
 * @param {String} studentId 学生ID
 * @returns {Promise} 请求Promise
 */
export function getSubmissionsByStudentId(studentId) {
  return request({
    url: `/submissions/student/${studentId}`,
    method: 'get'
  })
}

/**
 * 创建作业分配记录（当不存在时）
 *
 * @param {Number} assignmentId 作业ID
 * @param {String} studentId 学生ID
 * @returns {Promise} 请求Promise
 */
export function createAssignmentAllocation(assignmentId, studentId) {
  return request({
    url: '/assignment-allocations',
    method: 'post',
    data: {
      assignmentId,
      studentId,
      status: 0 // pending状态
    }
  })
}

/**
 * 修改学生密码
 *
 * @param {String} studentId 学生ID
 * @param {String} oldPassword 旧密码
 * @param {String} newPassword 新密码
 * @returns {Promise} 请求Promise
 */
export function changeStudentPassword(studentId, oldPassword, newPassword) {
  return request({
    url: '/students/change-password',
    method: 'post',
    params: {
      studentId,
      oldPassword,
      newPassword
    }
  })
} 